# 1、输如字符判断是否存在v1中，若不存在加入，若存在，加入v2
# v1 = {'你好', 'alex', 22, 'A'}
# v2 = []

# 判断存不存在就用in
# while True:
#     em = input("》》》")
#     if em.upper() != 'N':
#         if em in v1:
#             v2.append(em)
#         else:
#             v1.add(em)
#     else:
#         break
# print(v1)
# print(v2)
# 2、看代码解释原因
# == 判断内容是否相同
# is 判断id是否相同
# 两个字典都各自赋值，会有各自的内存单元，所以id不同
# v1 = {'k1': 'v1', 'k2': [1, 2, 3]}
# v2 = {'k1': 'v1', 'k2': [1, 2, 3]}
# result1 = v1 == v2
# result2 = v1 is v2
# print(result1, result2)

# 两个变量名都指向同一个内存单元，所以id相同
# v1 = {'k1': 'v1', 'k2': [1, 2, 3]}
# v2 = v1
# result1 = v1 == v2
# result2 = v1 is v2
# print(result1, result2)

# 两个变量名都指向同一个内存单元，所以v1 v2 内容都会改变
# v1 = {'k1': 'v1', 'k2': [1, 2, 3]}
# v2 = v1
# v1['k1'] = 'A'
# print(v2)

# 当程序执行到v2这一行时，将 "A"这个单元的内存放到了v2[3]的位置上，同样v1变量名也只想该单元
# 在执行下一行时，v1的变量名不在指向"A"这个单元，而是指向"B"这个单元，而v2[3]没有任何变化，
# 所以没有变化
# v1 = 'A'
# v2 = [1, 2, 3, v1]
# v1 = 'B'
# print(v2)

# 改题与上一题有些类似，userinfo字典中的值都存放这着info所指向的内存单元的地址
# 当发生append时，只是内存单元内容的改变，所以userinfo也会改变
# 当 info变量被赋予新值时，info这指向新的内存单元，而userinfo存储的id并没有
# 改变，所以内容也不会改变
# info = [1, 2, 3]
# userinfo = {'account': info, 'num': info, 'money': info}
# info.append(9)
# print(userinfo)
#
# info = '213456'
# print(userinfo)

# 同理，userinfo内的info都指向同一内存单元，只改变变量值而不是赋予新值时，
# userinfo就会一起改变
# info = [1, 2, 3]
# userinfo = [info, info, info, info, info]
# info[0] = 8
# print(userinfo)

# # 同理，userinfo内的info都指向同一内存单元，当发生userinfo[0][0] = 8时
# # 修改的地址时共享单元的地址，6个info都指向同一个内存块，就象info[0] = 8效果相同，
# info = [1, 2, 3]
# userinfo = [info, info, info, info, info]
# userinfo[0][0] = 8
# print(userinfo, info)

# 因为字典键的唯一性所以从第二次循环开始时就一直在改变user该键值对的值
# data = {}
# for i in range(10):
#     data['user'] = i
# print(data)
# 效果一样，而原理不同，是在for循环完后，i的值是保留最后一次循环的数据
# data = {}
# for i in range(10):
#       pass
# data['user'] = i
# print(data)

# 由于列表的性质，所以每次循环后都会加入新值，而这些新值都指向data字典所指向的内存单元，
# 所以data_list所有值都会随着data的变动而改变
# data_list = []
# data = {}
# for i in range(10):
#     data['user'] = i
#     data_list.append(data)
# print(data_list)

# 与上题不同，data的值随着每次循环而改变，每次循环都意味着会为data重新分配新内存单元的所以
# data_list内所有元素都指向不同内存单元，所以data_list
# 会记录data的变化情况
# data_list = []
# for i in range(10):
#     data = {'user': i}
#     data_list.append(data)
# print(data_list)
